package test.test01.network.rollback_TCP;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class EchoClient {
    private Socket socket;

    public EchoClient(String serverIP,int serverPort) throws IOException{
        //在创建socket对象过程中，涉及到“建立连接”
        //连接建立好后，服务器的信息就在操作系统中被TCP协议记录下来了，后续的读写操作，就可以直接通过socket对象来操作了
        socket = new Socket(serverIP,serverPort);
    }
    public void start() throws IOException{
        System.out.println("客户端启动中...");
        Scanner sc = new Scanner(System.in);

        try(InputStream inputStream = socket.getInputStream();
            OutputStream outputStream = socket.getOutputStream()){
            //可以针对控制台，可以针对网络，也可以针对文件，只要是“流”，就可以使用 Scanner 来读取 
            Scanner scannercNet = new Scanner(inputStream);
            PrintWriter pw = new PrintWriter(outputStream);

            while(true){
                //1.从控制台读取用户输入
                System.out.print(">");
                String request = sc.next();
                //2.构造请求并发送
                pw.println(request);
                //刷新缓冲区，把数据读入网卡
                pw.flush();
                //3.读取服务器的响应
                if(!scannercNet.hasNext()){
                    System.out.println("服务器断开连接");
                    break;
                }
                String response = scannercNet.next();
                //4.把响应显示到控制台
                System.out.println(response);
            }
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws IOException{
        EchoClient client = new EchoClient("127.0.0.1",9090);
        client.start();
    }
}
